summaryrefslogtreecommitdiffstats
path: root/src/hid_core/resources/system_buttons/home_button.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/hid_core/resources/system_buttons/home_button.cpp')
-rw-r--r--src/hid_core/resources/system_buttons/home_button.cpp26
1 files changed, 17 insertions, 9 deletions
diff --git a/src/hid_core/resources/system_buttons/home_button.cpp b/src/hid_core/resources/system_buttons/home_button.cpp
index f9c1f44b5..f665338f3 100644
--- a/src/hid_core/resources/system_buttons/home_button.cpp
+++ b/src/hid_core/resources/system_buttons/home_button.cpp
@@ -2,6 +2,8 @@
// SPDX-License-Identifier: GPL-2.0-or-later
#include "core/core_timing.h"
+#include "hid_core/frontend/emulated_controller.h"
+#include "hid_core/hid_core.h"
#include "hid_core/resources/applet_resource.h"
#include "hid_core/resources/shared_memory_format.h"
#include "hid_core/resources/system_buttons/home_button.h"
@@ -17,10 +19,6 @@ void HomeButton::OnInit() {}
void HomeButton::OnRelease() {}
void HomeButton::OnUpdate(const Core::Timing::CoreTiming& core_timing) {
- if (!smart_update) {
- return;
- }
-
std::scoped_lock shared_lock{*shared_mutex};
const u64 aruid = applet_resource->GetActiveAruid();
auto* data = applet_resource->GetAruidData(aruid);
@@ -29,11 +27,21 @@ void HomeButton::OnUpdate(const Core::Timing::CoreTiming& core_timing) {
return;
}
- auto& header = data->shared_memory_format->home_button.header;
- header.timestamp = core_timing.GetGlobalTimeNs().count();
- header.total_entry_count = 17;
- header.entry_count = 0;
- header.last_entry_index = 0;
+ auto& shared_memory = data->shared_memory_format->home_button;
+
+ if (!IsControllerActivated()) {
+ shared_memory.home_lifo.buffer_count = 0;
+ shared_memory.home_lifo.buffer_tail = 0;
+ return;
+ }
+
+ const auto& last_entry = shared_memory.home_lifo.ReadCurrentEntry().state;
+ next_state.sampling_number = last_entry.sampling_number + 1;
+
+ auto* controller = hid_core.GetEmulatedController(Core::HID::NpadIdType::Player1);
+ next_state.buttons.raw = controller->GetHomeButtons().raw;
+
+ shared_memory.home_lifo.WriteNextEntry(next_state);
}
} // namespace Service::HID